//
//  ACBaseViewModel.h
//  ACFramework
//
//  Created by caoyq on 2018/11/22.
//

#import <Foundation/Foundation.h>

/**
 基类viewModel。
 
 - 与子类控制器绑定刷新数据请求。统一处理刷新事件，子类只需要重写一个方法调用网络请求即可。
 
 - 记录网络请求对应的控制器，便于控制器销毁时取消网络请求。
 */
@interface ACBaseViewModel : NSObject

///对应控制器的数据源
@property (nonatomic, strong) NSMutableArray *dataSource;
/** 请求分页数据的页码 */
@property (nonatomic, assign) NSInteger pageIndex;
/** 请求分页数据每页个数 */
@property (nonatomic, assign) NSInteger pageSize;
/** 当前viewModel所在的控制器 */
@property (nonatomic, strong) UIViewController *currentViewController;
///当前控制器名
@property (nonatomic, strong) NSString *vcName;

///绑定控制器的初始化方法
- (instancetype)initWithViewController: (UIViewController *)viewController;

///默认在ACRefreshViewController中直接调用，实现刷新数据
- (void)loadData: (BOOL)isHeader success: (void (^)(BOOL haveMoreData))success failure: (void(^)(void))failure;

#pragma mark - 子类重写

/**
 内部实现刷新的请求，子类有刷新时必须重写该方法，实现各自的接口请求。

 @param success 成功回调
 @param failure 失败回调
 */
- (void)loadDataWithSuccess: (void(^)(NSArray *list))success failure: (void(^)(void))failure;

///返回页码的开始值，默认为0. 子类开始值不同时进行重写
- (NSInteger)pageIndexStartValue;

@end
